package com.own.component.common.login.util;

import com.own.component.common.em.RequestEnum;
import com.own.component.common.exception.BusinessSimpleException;
import com.own.component.common.login.user.BaseLoginUser;
import com.own.component.common.login.user.BasePermissionUser;

import java.util.List;

/**
 * SessionUserUtil
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public final class SessionUserUtil {

    /**
     * 是否登录
     *
     * @return 是否登录
     */
    public static boolean isLogin() {
        return getLoginUser(false).isLogin();
    }

    /**
     * 检查登录
     */
    public static void checkLogin() {
        if (!isLogin()) {
            throw new BusinessSimpleException(RequestEnum.NO_LOGIN);
        }
    }

    /**
     * 基本类用户信息（必须登录）
     *
     * @return 基本类用户信息
     */
    public static BaseLoginUser getLoginUser() {
        return getLoginUser(true);
    }

    /**
     * 获取用户的基本信息
     *
     * @param checkLogin 是否检查登录
     * @return 用户信息
     */
    public static BaseLoginUser getLoginUser(boolean checkLogin) {
        // 获取账号信息
        var loginUser = ParentGetUtil.INSTANCE.parentAuthenticationLoginUser.loginUser();
        // 验证信息
        if (checkLogin && (loginUser == null || !loginUser.isLogin())) {
            if (ParentGetUtil.INSTANCE.securityProperties.isLoginVerification()) {
                throw new BusinessSimpleException(RequestEnum.NO_LOGIN);
            } else {
                return loginUser;
            }
        }
        return loginUser;
    }

    /**
     * 权限类用户信息
     *
     * @return 权限类用户信息
     */
    public static BasePermissionUser getPermissionUser() {
        return getPermissionUser(true);
    }

    /**
     * 权限类用户信息
     *
     * @param checkLogin 是否检查登录
     * @return 权限类用户信息
     */
    public static BasePermissionUser getPermissionUser(boolean checkLogin) {
        var permissionUser = ParentGetUtil.INSTANCE.parentAuthenticationLoginUser.permissionUser();
        // 验证信息
        if (checkLogin && (permissionUser == null || !permissionUser.isLogin())) {
            if (ParentGetUtil.INSTANCE.securityProperties.isLoginVerification()) {
                throw new BusinessSimpleException(RequestEnum.NO_LOGIN);
            } else {
                return permissionUser;
            }
        }
        return permissionUser;
    }

    /**
     * 基本类用户信息
     *
     * @param userId 用户id
     * @return 基本类用户信息
     */
    public static List<BaseLoginUser> loginUser(Long userId) {
        return ParentGetUtil.INSTANCE.parentAuthenticationLoginUser.loginUser(userId);
    }

    /**
     * 权限类用户信息
     *
     * @param userId 用户id
     * @return 权限类用户信息
     */
    public static List<BasePermissionUser> permissionUser(Long userId) {
        return ParentGetUtil.INSTANCE.parentAuthenticationLoginUser.permissionUser(userId);
    }

}
